iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0
Python

在AWS上進行物聯網與人工智慧實作系列 第 15

D15-HTTP 請求/回應格式

  • 分享至 

  • xImage
  •  

HTTP 請求/回應格式

目錄

HTTP 簡介

HTTP(Hyper Text Transfer Protocol)稱為超文件傳輸協定,是 WWW(World Wide Web) 所採用的通訊協定。此協定具有跨平台的特性,當使用者使用 WWW 瀏覽器(Web Browser),透過 HTTP 協定,向 WWW 伺服器 (Web Server) 請求服務。因此,不同電腦系統中的資料都可以經由 HTTP 傳送至其他主機。

在 WWW 瀏覽器所使用的技術,是所謂的前端(front-end)技術,常見的有:

  • 超文字標記語言(Hyper Text Markup Language, HTML):建立結構化的網頁,透過不同的標籤(tag)的描述,使文件以多樣性不同的方式呈現在瀏覽器上,包括文件中的字型、段落格式、圖片、影像、聲音、動畫,甚至連結至其它主機上的文件或檔案。
  • CSS (Cascading Style Sheets):用來替網頁進行布局或美化。
  • JavaScript:網頁的腳本語言。
  • JavaScript 常見的框架:React、Angular、Vue。

在 WWW 伺服器所使用的技術,是所謂的後端(back-end)技術,常見的有:

  • WWW 伺服器:如 Apache, IIS, Engine X(nginx), Tomcat 等,可以提供單純的靜態網頁,也可以提供與不同程式語言結合的動態網頁。
  • Web 後端框架:有些程式語言本身就提供 Web 後端框架,如此一來就可以不用依賴 WWW 伺服器,可以直接開發後端系統,常見的 WWW 後端框架如 JavaScript 的 Node.js, Python 的 flask,django 等。

Open API範例-行政院全球資訊網OpenAPI

以下是透過行政院全球資訊網 OpenAPI 的使用來說明,HTTP client/HTTP protocol/HTTP server三者之間的關係,誠如上面所提到常見的 http client 通常都是由 WWW 瀏覽器所擔任,但是在很多情況下,開發者需要使用工具來擔任 HTTP client 的工作,這工具可以是自行撰寫程式、curl、postman、telnet、putty等。在這個範例中,以下角色分別是:

  • HTTP client:WWW 瀏覽器(chrome)
  • HTTP protocol:由行政院全球資訊網OpenAPI所提供的『行政院即時新聞API』的規範來撰寫內容。
  • HTTP server:行政院全球資訊網OpenAPI所提供。

行政院即時新聞API規格

欄位
endpoint https://opendata.ey.gov.tw/api/ExecutiveYuan/NewsEy
傳輸方式 GET
編碼 content-type: application/json; charset=utf-8

上傳參數規格 (Request Body)

欄位 說明
Keyword 關鍵字
StartDate 起始日期,格式:yyyy/mm/dd
EndDate 結束日,格式:yyyy/mm/dd
MaxSize 返回最大筆數(最大輸出筆數:1000筆)
IsRemoveHtmlTag 是否過濾Html Tag

打開 chrome 輸入網址 https://opendata.ey.gov.tw/api/index.html,輸入以下參數

欄位 內容
Keyword 颱風
StartDate 2024/08/10
EndDate 2024/08/19
MaxSize 2
IsRemoveHtmlTag false

https://ithelp.ithome.com.tw/upload/images/20240822/20129510poQBoXDZWj.png
圖 1. 輸入行政院即時新聞 API 參數

點擊 Execute,如果成功就會在 Response 頁面看到結果,如下圖所示。
https://ithelp.ithome.com.tw/upload/images/20240822/20129510SAYU9wlTpr.png
圖 2. 行政院即時新聞 API 回傳結果

將 Request URL 內的內容複製起來,開啟一個新的空白頁籤,在空白處點擊滑鼠右鍵,出現選單後點選檢查,就會出現 Chrome DevTools 畫面,請選擇 Network 頁籤。

https://ithelp.ithome.com.tw/upload/images/20240822/20129510JeMJuSQS6k.png
圖 3. Chrome DevTools - Network 頁籤

接著將 Request URL 張貼在網址中,就會出現相關的 Response,如下圖所示。會在 Headers 頁籤看到一些相關的訊息,這部份會在後面說明。

https://ithelp.ithome.com.tw/upload/images/20240822/20129510mJDfztR5iZ.png
圖 4. Chrome DevTools - Network 頁籤

HTTP 請求格式

在上面行政院即時新聞 API範例中,API是開發人員所定義,而下層的傳輸則是透過 HTTP 協定來進行傳輸,而 http 協定非常簡單,只分成客戶端的請求(request)與伺服器端的回應(response),請求格式如下:

  • 請求列 (Request line):請求訊息的第一列。
  • 標頭,可分為:
    • 通用標頭 (General):要求訊息有可能出現的訊息。
    • 要求標頭:與客戶端有關的訊息。
    • 本體標頭:與本體資料有關的訊息。
  • 本體訊息:本體資料,與上面標頭間以 <CR><LF> 區隔

https://ithelp.ithome.com.tw/upload/images/20240822/20129510VwhdHHZiTQ.png
圖 5. HTTP 請求格式

在上面行政院即時新聞 API範例中,HTTP 請求內容如下

GET /api/ExecutiveYuan/NewsEy?Keyword=%E9%A2%B1%E9%A2%A8&StartDate=2024%2F08%2F10&EndDate=2024%2F08%2F19&MaxSize=2&IsRemoveHtmlTag=false HTTP/2
Host: opendata.ey.gov.tw
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: zh-TW,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br, zstd
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
TE: trailers

https://ithelp.ithome.com.tw/upload/images/20240822/201295107skIZEmQBT.png
圖 6. 行政院即時新聞 API 的 HTTP 請求內容

分析上述的範例,請求列的內容格式如下說明

  • 方法 (Method):定義要求列的方法,包括 GET、POST、HEAD、PUT、DELETE等多種不同的存取方法,目前是使用 GET 方法。
  • SP(Space):欄位之間加空白作區隔。
  • URL:要求的物件由 URL 欄位來識別,/api/ExecutiveYuan/NewsEy?Keyword=%E9%A2%B1%E9%A2%A8&StartDate=2024%2F08%2F10&EndDate=2024%2F08%2F19&MaxSize=2&IsRemoveHtmlTag=false
  • HTTP-Version(版本):HTTP/2。
GET /api/ExecutiveYuan/NewsEy?Keyword=%E9%A2%B1%E9%A2%A8&StartDate=2024%2F08%2F10&EndDate=2024%2F08%2F19&MaxSize=2&IsRemoveHtmlTag=false HTTP/2

HTTP 常用的存取方法如下所示:

方法 簡述
Options 詢問伺服器可使用的通訊選項
POST 提供客戶端上傳資料給伺服器
GET 在 URL 上傳送資料來讀取伺服器上的資料
PUT 提供客戶端上傳資料
HEAD 類似 GET,但伺服器只對標頭回應(不包括資料)
PATCH 提供與原始檔案不同地方以進行修改
DELETE 提供客戶端删除指定的資料(伺服器可不同意)
TARCE 要求伺服器將收到之訊息傳回來(例如 test);記錄所經過的 proxy
CONNECT 要求代理同服器 (Proxy) 建立連線轉送 HTTP 訊息

標頭格式為標頭名稱: 標頭內容,如Host: opendata.ey.gov.tw等。

本體訊息:因為本範例是 GET 方法,不會傳送本體訊息。

HTTP 回應格式

在上面行政院即時新聞 API範例中,API是開發人員所定義,而下層的傳輸則是透過 HTTP 協定來進行傳輸,而 http 協定非常簡單,只分成客戶端的請求(request)與伺服器端的回應(response),回應格式如下:

  • 狀態列 (Status line):屬回應訊息的第一列。
  • 標頭,可分為:
    • 通用標頭:回應訊息可能出現的訊息。
    • 要求標頭:與伺服端有關的訊息。
    • 本體標頭:與本體資料有關的訊息。
  • 本體訊息:本體資料,與上面標頭間以 <CR><LF> 區隔

https://ithelp.ithome.com.tw/upload/images/20240822/20129510wSdsat6oOc.png
圖 7. HTTP 回應格式

在上面行政院即時新聞 API範例中,HTTP 回應內容如下,回應的本體訊息內容很多,所以部分省略。

HTTP/2 200 
content-type: application/json; charset=utf-8
strict-transport-security: max-age=31536000; includeSubDomains
x-frame-options: SAMEORIGIN
x-xss-protection: 1;mode=block
x-content-type-options: nosniff
date: Mon, 19 Aug 2024 09:34:10 GMT
content-length: 12878
X-Firefox-Spdy: h2

[{"標題":...

https://ithelp.ithome.com.tw/upload/images/20240822/201295100DlMwwB3XD.png
圖 8. 行政院即時新聞 API 的 HTTP 回應表頭

分析上述的範例,狀態列的內容格式如下說明

  • HTTP 版本:HTTP/2。
  • SP(Space):欄位之間加空白作區隔。
  • 狀態碼:伺服器回傳處理狀態。
  • 說明理由:說明狀態理由。
HTTP/2 200 

狀態碼可以分為:

  • Informational responses (100 – 199)
  • Successful responses (200 – 299)
  • Redirection messages (300 – 399)
  • Client error responses (400 – 499)
  • Server error responses (500 – 599)

標頭格式為標頭名稱: 標頭內容,如content-length: 12878說明回傳資料長度為12878 bytes等。

本體訊息:就是查詢的新聞內容,以 JSON 的格式回傳。

https://ithelp.ithome.com.tw/upload/images/20240822/20129510OxPKFrKlQU.png
圖 9. 行政院即時新聞 API 的回應本體

參考資料


上一篇
D14-網際網路模型
下一篇
D16-HTTP 範例-使用flask與telnet
系列文
在AWS上進行物聯網與人工智慧實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言